package com.shujia.day17.lambda4use;


import java.util.ArrayList;

public class StaffOperator {
    public static void main(String[] args) {

        // 员工过滤年龄和工资案例。
        // 1.先创建员工对象 并将其添加到List集合中

        ArrayList<Staff> staffs = new ArrayList<>();

        staffs.add(new Staff("柏杨", 22, 16000));
        staffs.add(new Staff("张从文", 20, 15000));
        staffs.add(new Staff("唐彬", 21, 20000));
        staffs.add(new Staff("曹聪", 19, 21000));
        staffs.add(new Staff("赖成", 18, 25000));


        // 使用面向对象的思想完成 
        //   创建两个类，在类中提供对应的成员方法，并 对数据进行做过滤操作


        /*
            Lambda表达的写法：
                注意：
                    1. 其需有一个接口，并且接口中定义了有一个 抽象方法
                    2. 表达式组成：() -> {}
                                 其中()中可以定义变量名 但是其变量类型可以不需要给定 因为其可以进行推导
                                 {}中可以定义其代码逻辑


         */

        Filter filter = list ->  {
            ArrayList<Staff> staff1 = new ArrayList<>();
            for (Staff staff : list) {
                if (staff.age < 20) {
                    staff1.add(staff);
                }
            }
            return staff1;
        };


        // 多态的写法
        useFilter(filter, staffs
        );

        useFilter((list) -> {
                    ArrayList<Staff> staff1 = new ArrayList<>();
                    for (Staff staff : list) {
                        if (staff.salary >= 20000) {
                            staff1.add(staff);
                        }
                    }
                    return staff1;
                }, staffs
        );


    }

    public static void useFilter(Filter filter, ArrayList<Staff> staffs) {
        ArrayList<Staff> filter1 = filter.filter(staffs);
        System.out.println(filter1);
    }

}
